export default {
	// 开启模块命名空间
	namespaced: true,
	state: () => ({
		// 将浏览器的存储数据初始化
		cart: JSON.parse(uni.getStorageSync('cart') || '[]')
	}),
	mutations: {
		// 改变goods_detail里的购物车徽标
		addToCart(state, goods) {
			// 如果找到，返回对应goods_id的对象，找不到返回undefined
			const result = state.cart.find(item => item.goods_id === goods.goods_id)
			// console.log(result)
			// 判断购物车里是否有该物品，有徽标+=1，没有将商品加入购物车
			if(result) {
				result.goods_count++
			}else {
				state.cart.push(goods)
			}
			// console.log(state.cart)
			// 在更改购物车数量后，通过commit方法，调用'm_cart'命名空间下的 saveBadge函数将数据存储在本地浏览器
			this.commit('m_cart/saveStorage')
		},
		
		// 持久化存储购物车数据
		saveStorage(state) {
			uni.setStorageSync('cart', JSON.stringify(state.cart))
		},
		
		// 更新勾选框的数据，并存储
		updateRadio(state, goods) {
			const result = state.cart.find(item => item.goods_id === goods.goods_id)
			if(result) {
				result.goods_state = goods.goods_state
				//并将数据存储到浏览器中
				this.commit('m_cart/saveStorage')
			}
		},
		
		// 更新所有勾选框数据
		updateAllRadio(state, newState) {
			state.cart.forEach(item => item.goods_state = newState)
		},
		
		// 更新商品数量，并存储
		updateNum(state, goods) {
			const result = state.cart.find(item => item.goods_id === goods.goods_id)
			if(result) {
				result.goods_count = goods.goods_count
				this.commit('m_cart/saveStorage')
			}
		},
		
		// 删除购物车商品
		removeCart(state, goods) {
			state.cart = state.cart.filter(item => item.goods_id !== goods.goods_id)
			this.commit('m_cart/saveStorage')
		} 
	},
	getters: {
		// 统计购物车商品数量
		total(state) {
			let c = 0
			state.cart.forEach(item => c += item.goods_count )
			return c
		},
		
		// 统计商品勾选数量
		checkedCount(state) {
			// filter找到符合条件的数据，返回数组
			// reduce累加，参数一回调函数， 参数二，回调函数的参数一的默认值，返回累加后的数量
			// 一定要将数据返回
			return state.cart.filter(item => item.goods_state).reduce((total, item) => total += item.goods_count, 0)
		},
		
		// 勾选商品的总价格
		totalPrice(state) {
			return state.cart.filter(item => item.goods_state).reduce((total, item) => { return total += item.goods_price * item.goods_count}, 0).toFixed(2)
		}
	}
}